package model;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.GeneratedValue;

@Entity
@Table(name = "VISITA")
public class Visita implements Serializable {

	private static final long serialVersionUID = 8768291126494725142L;
	@TableGenerator(
			name="generatorVisita",
			pkColumnValue="SEQ_VISITA",
			allocationSize=1)
	@Id
	@GeneratedValue(strategy=GenerationType.TABLE, generator = "generatorVisita")
	@Column(name  = "VISI_ID")
	private Integer id;
	
	@Column(name  = "VISI_DT_DH_VISITA")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataHoraVisita;

	@ManyToMany
	@JoinTable(name = "VISITA_PECA", 
			inverseJoinColumns = { @JoinColumn(name = "ITES_ID", referencedColumnName = "ITES_ID") }, 
			joinColumns = { @JoinColumn(name = "VISI_ID", referencedColumnName = "VISI_ID") })
	private Collection<Peca> colPeca;
	
	@Embedded
	private EstoqueViatura estViat;
	
	@Column(name  = "VISI_TX_DES_SERV")
	private String descricaoServico;
	
	@Column(name  = "VISI_DT_DUR_REPARO")
	@Temporal(TemporalType.TIMESTAMP)
	private Date duracaoReparo;
	
	@Column(name  = "VISI_DT_DH_PREV_F")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataHoraPrevistaFinal;
	
	@ManyToOne(optional = false)
	@JoinColumn(name = "ORSE_ID", referencedColumnName = "ORSE_ID")
	private OrdemServico os;

	@ManyToOne
	@JoinColumn(name = "TECN_ID", referencedColumnName = "TECN_ID")
	private Tecnico tecnico;

	@OneToMany(mappedBy="visita")
	private Collection<Equipamento> colEquipamento;

	
	public Date getDataHoraVisita() {
		return dataHoraVisita;
	}

	public void setDataHoraVisita(Date dataHoraVisita) {
		this.dataHoraVisita = dataHoraVisita;
	}

	public String getDescricaoServico() {
		return descricaoServico;
	}

	public void setDescricaoServico(String descricaoServico) {
		this.descricaoServico = descricaoServico;
	}

	public Date getDuracaoReparo() {
		return duracaoReparo;
	}

	public void setDuracaoReparo(Date duracaoReparo) {
		this.duracaoReparo = duracaoReparo;
	}

	public Date getDataHoraPrevistaFinal() {
		return dataHoraPrevistaFinal;
	}

	public void setDataHoraPrevistaFinal(Date dataHoraPrevistaFinal) {
		this.dataHoraPrevistaFinal = dataHoraPrevistaFinal;
	}

	public OrdemServico getOs() {
		return os;
	}

	public void setOs(OrdemServico os) {
		this.os = os;
	}

	public Tecnico getTecnico() {
		return tecnico;
	}

	public void setTecnico(Tecnico tecnico) {
		this.tecnico = tecnico;
	}

	

	public Integer getId() {
		return id;
	}

	public Collection<Peca> getColPeca() {
		return colPeca;
	}

	public void setColPeca(Collection<Peca> colPeca) {
		this.colPeca = colPeca;
	}

	public Collection<Equipamento> getColEquipamento() {
		return colEquipamento;
	}

	public void setColEquipamento(Collection<Equipamento> colEquipamento) {
		this.colEquipamento = colEquipamento;
	}

	public void setEstViat(EstoqueViatura estViat) {
		this.estViat = estViat;
	}

	public EstoqueViatura getEstViat() {
		return estViat;
	}

}
